Elasticsearch 的语法
一、添加
1、创建索引
索引名称为:test
PUT http://192.168.12.137:9200/test/ |
2、创建文档(自动生成ID)
给文档person 新增数据
POST http://192.168.12.137:9200/test/person/ |
3、创建文档 (设置id的)
POST http://192.168.12.137:9200/test/person/1 |
二、查询
a、查询索引(test)
GET http://192.168.12.137:9201/test/_settings |
b、同时获取两个索引(test 和robot)
GET http://192.168.12.137:9201/test,robot/_settings |
c、查询所有索引的信息
http://192.168.12.137:9201/_all/_settings |
1、查询文档信息通过ID
GET http://192.168.12.137:9200/test/person/1 |
2、查询文档信息通过name属性
GET http://192.168.12.137:9200/test/person/_search?q=name:jieke |
3、通过_source 获取指定的字段
只查询 name 字段的数据
GET http://192.168.12.137:9200/test/person/1?_source=name |
4、查询所有数据
POST http://localhost:9200/test/_search |
5、form size分页查询
POST http://localhost:9200/test/_search |
6、查询并排序
# 排序 |
7、分组查询 group_by
# 统计个数 |
8、match 查询
|
9、语法查询
# 语法查询 |
10、rang 范围查询
|
11、should 查询
should 满足其中一个就可以
POST http://localhost:9200/test/_search |
12、filter查询
POST http://localhost:9200/test/_search |
13、must 与must_not
# must 必须满足所有条件 |
14、查询语句提高权重
content 字段必须包含 full 、 text 和 search
所有三个词。
如果content
字段也包含Elasticsearch
或 Lucene
,文档会获得更高的评分 _score
。
{ |
再修改一下:
GET /_search |
上面的语句使用默认的 boost 值 1 。
而"query": "Elasticsearch", "boost": 3
这条语句更为重要,因为它有最高的 boost 值。
"query": "Lucene","boost": 2
这条语句比使用默认值的更重要,但它的重要性不及Elasticsearch
语句。
还有一种方法:boosting 查询
{ |
它接受 positive 和 negative 查询。只有那些匹配 positive 查询的文档罗列出来,对于那些同时还匹配 negative 查询的文档将通过文档的原始 _score 与 negative_boost 相乘的方式降级后的结果。
为了达到效果, negative_boost 的值必须小于 1.0 。在这个示例中,所有包含负向词的文档评分 _score 都会减半。
15、dis_max 查询
分离 最大化查询
比如有如下两条数据:
PUT /my_index/my_type/1 |
我们进行查询
{ |
但返回的结果:发现查询的结果是文档 1 的评分更高:
{ |
为了理解导致这样的原因, 需要回想一下 bool 是如何计算评分的:
1、它会执行 should 语句中的两个查询。
2、加和两个查询的评分。
3、乘以匹配语句的总数。
4、除以所有语句总数(这里为:2)。
文档 1 的两个字段都包含 brown 这个词,所以两个 match 语句都能成功匹配并且有一个评分。文档 2 的 body 字段同时包含 brown 和 fox 这两个词,但 title 字段没有包含任何词。这样, body 查询结果中的高分,加上 title 查询中的 0 分,然后乘以二分之一,就得到比文档 1 更低的整体评分。
在本例中, title 和 body 字段是相互竞争的关系,所以就需要找到单个 最佳匹配 的字段。
如果不是简单将每个字段的评分结果加在一起,而是将 最佳匹配 字段的评分作为查询的整体评分,结果会怎样?这样返回的结果可能是: 同时 包含 brown 和 fox 的单个字段比反复出现相同词语的多个不同字段有更高的相关度
{ |
分离最大化查询(Disjunction Max Query)指的是: 将任何与任一查询匹配的文档作为结果返回,但只将最佳匹配的评分作为查询的评分结果返回 :
{ |
16、multi_match 查询
multi_match 查询为能在多个字段上反复执行相同查询提供了一种便捷方式
multi_match 多匹配查询的类型有多种,其中的三种恰巧与 了解我们的数据 中介绍的三个场景对应,即: best_fields 、 most_fields 和 cross_fields (最佳字段、多数字段、跨字段)
如下简单demo:
bool查询
{ |
换成multi_match 查询
{ |
三、修改
1、直接修改
修改文档person id为1 的name属性为 ‘杰克’
POST http://192.168.12.137:9201/test/person/1/_update |
2、脚本修改
POST http://192.168.12.137:9201/test/person/1/_update |
四、删除
1、删除索引
删除test 索引
DELETE http://192.168.12.137:9201/test |
2、删除文档
id 为1 的数据
DELETE http://192.168.12.137:9201/test/person/1 |
3、通过条件删除数据
POST twitter/_delete__query |
我这个是5.6.4 版本的,具体的看文档:
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docs-delete-by-query.html#docs-delete-by-query
4、删除字段(field)
删除 person 文档里的field 字段
POST http://192.168.12.137:9201/test/person/_update |
五、mapping 映射
在创建索引的时候,可以预先定义字段的类型与相关属性,分为静态映射和动态映射
每个字段可添加的属性有:
属性 | 说明 | 适用类型 |
---|---|---|
store | 可选值有:yes、no ,设为yes就是存储,no 不存储 | all |
index | 可选值有:analyzed、not_analyzed、no ,analyzed— 索引并分析,not_analyzed – 索引但不分析,no —不索引这个字段,这样就搜不到了。默认值是:analyzed | string ,其他类型只能设置 not_analyzed、no |
null_value | 当字段为空时,可以为它设置一个默认值:比如 “null_value”:”NAN” | all |
boost | 字段的权重。默认值:1.0 | all |
index_analyzer | 设置一个索引时用的分析器 | all |
search_analyzer | 设置一个搜索时用的分析器 | all |
analyzer | 可以设置索引和搜索时用到的分析器,默认使用 standard 分析器,除外,你还可以使用 whitespace、simple、english 这3个内置的分析器 | all |
include_in_all | 它的作用是每个字段默认都搜索到,如果你不想让某个字段被搜索到,那么将这个字段设置为false 即可。默认值:true | all |
index_name | 定义字段的名称,默认值是字段本身的名字 | all |
norms | 作用是根据各种规范化因素去计算权值,这样方便查询,在analyzed 定义字段里,值为true、not-analyzed 是 false。 | all |
1、创建索引并配置映射
PUT http://192.168.12.137:9201/person |
2、查看映射
GET http://192.168.12.137:9201/person/_mapping |
3、删除映射
DELETE http://192.168.12.137:9201/person/man/_mapping |
参考文献:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html